import java.util.*;

// 定义N叉树的节点结构
class Node {
    public int val; // 节点的值
    public List<Node> children; // 子节点列表

    public Node() {}

    public Node(int val) {
        this.val = val;
    }

    public Node(int val, List<Node> children) {
        this.val = val;
        this.children = children;
    }
}

public class NaryTreeLevelOrderTraversal {

    public List<List<Integer>> levelOrder(Node root) {
        List<List<Integer>> result = new ArrayList<>(); // 用于存储层序遍历的结果
        if (root == null) { // 如果根节点为空，返回空列表
            return result;
        }

        Queue<Node> queue = new LinkedList<>(); // 创建队列用于BFS
        queue.offer(root); // 将根节点加入队列

        while (!queue.isEmpty()) { // 当队列不为空时继续遍历
            int size = queue.size(); // 当前层的节点个数
            List<Integer> level = new ArrayList<>(); // 存储当前层的节点值

            for (int i = 0; i < size; i++) {
                Node node = queue.poll(); // 从队列中取出节点
                level.add(node.val); // 将节点值加入当前层的列表

                // 如果子节点不为空，遍历并将子节点加入队列中
                if (node.children != null) {
                    for (Node child : node.children) {
                        queue.offer(child);
                    }
                }
            }
            result.add(level); // 将当前层的结果加入最终结果中
        }

        return result;
    }

    public static void main(String[] args) {
        // 创建一个N叉树的例子
        Node child5 = new Node(5);
        Node child6 = new Node(6);
        List<Node> children3 = Arrays.asList(child5, child6);
        Node child3 = new Node(3, children3);
        Node child2 = new Node(2);
        Node child4 = new Node(4);
        List<Node> children1 = Arrays.asList(child3, child2, child4);
        Node root = new Node(1, children1);

        NaryTreeLevelOrderTraversal solution = new NaryTreeLevelOrderTraversal();
        List<List<Integer>> result = solution.levelOrder(root);

        // 打印结果
        for (List<Integer> level : result) {
            System.out.println(level);
        }
    }
}
